#ifndef _MyUart_H
#define _MyUart_H

//串口测试程序   V1.1           修改日期：2025/6/6
//实现功能：单函数控制打印单个字符
//					单函数控制打印字符串
//					可变重定向（修改Printf_flag ，即可改变重定向输出串口）
//					usart0可以使用循环DMA接收定长数据（V1.1 new）
//By:TAO XIN YU (陶鑫宇)



#include "gd32e230.h"                   // Device header
#include "stdio.h"
#include "string.h"


//*************************************************************************//
//            USART0配置区
#define Uart0_RCU_GPIOX 				RCU_GPIOA				//Uart0使用的GPIO组时钟
#define Uart0_GPIOX 						GPIOA						//Uart0使用的GPIO组
#define Uart0_TX_pin 						GPIO_PIN_9      //Uart0 Tx引脚
#define Uart0_RX_pin 						GPIO_PIN_10     //Uart0 Rx引脚
				
#define Uart0_word  						USART_WL_8BIT 	//配置数据位 8位
#define Uart0_stop   						USART_STB_1BIT	//配置停止位 1位
#define Uart0_parity 						USART_PM_NONE   //配置奇偶校验 无校验
#define Uart0_baudrate 					115200U					//配置baudrate(波特率)
#define Uart0_nvic_priority			0								//配置中断优先级

#define receiver_0_buffer_size   (100)					//串口0接收缓存数组大小
extern char receiver_0_buffer[receiver_0_buffer_size]; //串口0接收缓存数组

#define UART0_DMA_RX_ENABLE				0           	//DMA/INT切换控制RX 0：使用INT 1：使用DMA
#define UART0_RXDATA_ADDR        ((unsigned int)0x40013824) //USART0 接收数据寄存器基地址
	
//*************************************************************************//
//            USART1配置区
#define Uart1_word  						USART_WL_8BIT 	//配置数据位 8位
#define Uart1_stop   						USART_STB_1BIT	//配置停止位 1位
#define Uart1_parity 						USART_PM_NONE   //配置奇偶校验 无校验
#define Uart1_baudrate 					115200U					//配置baudrate(波特率)

#define Uart1_RCU_GPIOX 				RCU_GPIOA				//Uart1使用的GPIO组时钟
#define Uart1_GPIOX 						GPIOA						//Uart1使用的GPIO组
#define Uart1_TX_pin 						GPIO_PIN_2      //Uart1 Tx引脚
#define Uart1_RX_pin 						GPIO_PIN_3      //Uart1 Rx引脚
#define Uart1_nvic_priority			0								//配置中断优先级

#define receiver_1_buffer_size   (100)		//串口1接收缓存数组大小
extern char receiver_1_buffer[receiver_1_buffer_size]; //串口1接收缓存数组


//*************************************************************************//
//            USART通用配置区
//printf重定向标志位 0:使用UART0    1：使用UART1 
extern unsigned char Printf_flag;

//计算数组大小
#define ARRAYNUM(arr_name)  ((unsigned int)sizeof(arr_name)/sizeof(*(arr_name)))
//*************************************************************************//
//            USART函数区

//串口初始化(全部)
//无参
//无返回值
void MyUart_all_init(void);

//串口0初始化
//无参
//无返回值
void MyUart0_init(void);

//串口1初始化
//无参
//无返回值
void MyUart1_init(void);

//串口发送单个数据
//参数：UART_id             0:使用串口0      1:使用串口0
//参数：data                要发送的数据
//无返回值
void MyUART_send_one_data(unsigned char UART_id,char data);

//串口发送字符串
//参数：UART_id             0:使用串口0      1:使用串口0
//参数：string              要发送的字符串
void MyUART_send_string(unsigned char UART_id,char* string);



#endif


